package com.pdd.util;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 文件上传工具类
 */
public class UploadUtil {

    /**
     * 处理上传的方法。
     *
     * @param file    要上传的文件。
     * @param request 请求对象。
     * @return 上传后的文件地址，如果失败返回null。
     */
    public static String upload(MultipartFile file, HttpServletRequest request) {
        String fileName = file.getOriginalFilename();
        long size = file.getSize();

        // 截取文件后缀名
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);

        // 随机生成新文件名：时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssms");
        String time = sdf.format(new Date());

        // 随机生成新文件名：4位随机数
        Random random = new Random();
        int ranNum = random.nextInt(9000) + 1000;

        // 拼接，获取目标文件名（要存储在服务器中的文件名）（yyyyMMddHHmmssmsrrrr.xxx）
        String targetName = time + ranNum + "." + suffix;

        // 上传的目标文件夹
        String uploadDir = request.getServletContext().getRealPath("/upload");

        // 如果目标文件夹不存在，则新建文件夹
        File dir = new File(uploadDir);
        if (!dir.exists()) {
            dir.mkdir();
        }

        // 将上传的文件写入到目标位置，并以随机产生的文件名命名。
        File uploadFile = new File(uploadDir, targetName);
        try {
            file.transferTo(uploadFile);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        return "/upload/" + targetName;
    }

}
